עברית

גלו את העוצמה של מחשוב ללא שרתים עם Google Cloud Functions. מדריך זה סוקר טריגרים של HTTP, ומספק למפתחים ברחבי העולם את הידע לבנות יישומים מונעי-אירועים הניתנים להרחבה.

Google Cloud Functions: מדריך מקיף לטריגרים של HTTP

Google Cloud Functions (GCF) היא סביבת הרצה ללא שרתים (serverless) המאפשרת לכם לבנות ולקשר שירותי ענן. עם Cloud Functions, אתם כותבים פונקציות פשוטות וייעודיות המוצמדות לאירועים הנפלטים מתשתית הענן והשירותים שלכם. הפונקציה שלכם מופעלת כאשר האירוע שאתם עוקבים אחריו מתרחש. גישה זו מאפשרת לכם לפתח יישומים מונעי-אירועים מבלי לנהל שרתים או סביבות הרצה.

אחת הדרכים הנפוצות ביותר להפעיל (trigger) פונקציית ענן היא באמצעות בקשת HTTP. מדריך זה יצלול לעולם טריגרים של HTTP ב-Google Cloud Functions, ויספק לכם את הידע לבנות יישומים חזקים, ניתנים להרחבה וחסכוניים.

מהם טריגרים של HTTP?

טריגר HTTP מאפשר לכם להריץ את פונקציית הענן שלכם בתגובה לבקשת HTTP. בעיקרו של דבר, כאשר בקשת HTTP נשלחת לכתובת URL ספציפית, Google Cloud Functions יריץ באופן אוטומטי את הפונקציה המשויכת. זה הופך את טריגרי ה-HTTP לאידיאליים לבניית ממשקי API, וובהוקים (webhooks) ויישומי אינטרנט מונעי-אירועים.

יתרונות מרכזיים של שימוש בטריגרים של HTTP:

יצירת פונקציית ענן עם טריגר HTTP

בואו נעבור על תהליך יצירת פונקציית ענן פשוטה עם טריגר HTTP. ניצור פונקציה שמגיבה עם הודעת "Hello, World!". ניתן להתאים דוגמה זו עבור אזורים גלובליים שונים על ידי שינוי פשוט של מחרוזת הפלט.

דרישות קדם:

שלבים:

  1. יצירת פרויקט חדש (אם אין לכם):

    אם עדיין אין לכם פרויקט GCP, צרו אחד ב-Google Cloud Console.

  2. הפעלת ה-API של Cloud Functions:

    ב-Cloud Console, נווטו אל ה-API של Cloud Functions והפעילו אותו.

  3. יצירת ספריית פונקציה:

    צרו ספרייה חדשה עבור פונקציית הענן שלכם. לדוגמה:

    mkdir hello-http
    cd hello-http
  4. כתיבת קוד הפונקציה:

    צרו קובץ בשם `main.py` (או `index.js` עבור Node.js) עם הקוד הבא:

    פייתון (main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            .
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hello, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hello, ${name}!`);
    };
  5. יצירת קובץ דרישות (פייתון בלבד):

    אם אתם משתמשים בפייתון, צרו קובץ בשם `requirements.txt` והוסיפו את כל התלויות שהפונקציה שלכם צריכה. עבור דוגמה זו, אין בכך צורך ממשי, אך זוהי פרקטיקה טובה לכלול קובץ כזה. אתם יכולים להשאיר אותו ריק אם אין לכם תלויות.

  6. פריסת הפונקציה:

    השתמשו בפקודה `gcloud functions deploy` כדי לפרוס את הפונקציה שלכם. החליפו את `YOUR_FUNCTION_NAME` בשם הרצוי עבור הפונקציה שלכם.

    פייתון:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime python39 \
        --trigger-http \
        --allow-unauthenticated

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    הסבר על הפרמטרים:

    • `YOUR_FUNCTION_NAME`: השם שברצונכם לתת לפונקציית הענן שלכם.
    • `--runtime`: סביבת ההרצה של הפונקציה שלכם (לדוגמה, `python39`, `nodejs16`).
    • `--trigger-http`: מציין שהפונקציה צריכה להיות מופעלת על ידי בקשות HTTP.
    • `--allow-unauthenticated`: מאפשר לכל אחד להפעיל את הפונקציה ללא אימות. אזהרה: השתמשו בזהירות כאשר אתם מאפשרים זאת בסביבות ייצור (production)! שקלו ליישם אימות והרשאה נאותים.
  7. בדיקת הפונקציה:

    לאחר הפריסה, פקודת `gcloud` תציג כפלט את כתובת ה-URL של הפונקציה שלכם. לאחר מכן תוכלו לבדוק אותה על ידי שליחת בקשת HTTP לכתובת זו באמצעות כלי כמו `curl` או Postman.

    curl YOUR_FUNCTION_URL

    אתם אמורים לראות את ההודעה "Hello, World!" בתגובה. אתם יכולים גם להעביר שם כפרמטר שאילתה:

    curl "YOUR_FUNCTION_URL?name=YourName"

    זה אמור להחזיר "Hello, YourName!"

הבנת בקשת ותגובת ה-HTTP

כאשר פונקציית ענן מופעלת על ידי בקשת HTTP, היא מקבלת אובייקט המכיל מידע על הבקשה. אובייקט זה כולל בדרך כלל:

הפונקציה שלכם צריכה להחזיר תגובת HTTP, הכוללת:

דוגמה: טיפול במתודות HTTP שונות

הנה דוגמה כיצד לטפל במתודות HTTP שונות בפונקציית הענן שלכם:

פייתון (main.py):

from flask import escape

def http_method(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response`.
    """
    if request.method == 'GET':
        return 'This is a GET request!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'This is a POST request with message: {message}'
        else:
            return 'This is a POST request without a message.'
    else:
        return 'Unsupported HTTP method.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('This is a GET request!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`This is a POST request with message: ${message}`);
      } else {
        res.status(200).send('This is a POST request without a message.');
      }
      break;
    default:
      res.status(405).send('Unsupported HTTP method!');
      break;
  }
};

זכרו לפרוס את הפונקציה המעודכנת באמצעות הפקודה `gcloud functions deploy`.

אבטחת טריגרי ה-HTTP שלכם

אבטחה היא בעלת חשיבות עליונה בעבודה עם טריגרים של HTTP, במיוחד כאשר מתמודדים עם נתונים רגישים או פעולות קריטיות. להלן מספר שיקולי אבטחה מרכזיים:

אימות והרשאה

כברירת מחדל, פונקציות ענן המופעלות על ידי HTTP נגישות לציבור אם אתם משתמשים בדגל `--allow-unauthenticated`. ברוב תרחישי הייצור (production), תרצו להגביל את הגישה למשתמשים או שירותים מורשים בלבד. Google Cloud מספק מספר אפשרויות לאימות והרשאה:

אימות קלט (Input Validation)

ודאו תמיד את תקינות נתוני הקלט המתקבלים בפונקציית הענן שלכם כדי למנוע פרצות אבטחה כגון הזרקת SQL או Cross-Site Scripting (XSS). השתמשו בטכניקות חיטוי (sanitization) והימלטות (escaping) מתאימות כדי להגן מפני קלט זדוני.

HTTPS

ודאו שפונקציית הענן שלכם נגישה רק באמצעות HTTPS כדי להצפין את התקשורת בין הלקוח לפונקציה. Google Cloud Functions מספק באופן אוטומטי נקודות קצה (endpoints) של HTTPS.

הגבלת קצב (Rate Limiting)

ישמו הגבלת קצב כדי למנוע שימוש לרעה והתקפות מניעת שירות (DoS). אתם יכולים להשתמש בשירותים כמו Google Cloud Armor כדי להגן על פונקציות הענן שלכם מתעבורה מוגזמת.

תרחישי שימוש עבור טריגרים של HTTP

טריגרים של HTTP הם רב-תכליתיים וניתן להשתמש בהם במגוון רחב של יישומים. להלן כמה תרחישי שימוש נפוצים:

דוגמאות מתעשיות שונות

טכניקות מתקדמות

שימוש במשתני סביבה

משתני סביבה מאפשרים לכם להגדיר את פונקציית הענן שלכם מבלי לקודד מידע רגיש או ערכי תצורה בקוד שלכם. ניתן להגדיר משתני סביבה באמצעות הפקודה `gcloud functions deploy` או ב-Google Cloud Console.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

בקוד שלכם, אתם יכולים לגשת למשתני סביבה באמצעות המילון `os.environ` (פייתון) או האובייקט `process.env` (Node.js).

פייתון:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Use the API key in your function
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Use the API key in your function
  res.status(200).send(`API Key: ${apiKey}`);
};

טיפול במשימות אסינכרוניות

עבור משימות ארוכות או עתירות חישוב, עדיף להשתמש בעיבוד אסינכרוני כדי להימנע מחסימת בקשת ה-HTTP. אתם יכולים להשתמש בשירותים כמו Google Cloud Tasks או Cloud Pub/Sub כדי להעביר משימות אלו לתורים נפרדים.

טיפול בשגיאות ורישום לוגים

ישמו טיפול שגיאות ורישום לוגים חזקים בפונקציות הענן שלכם כדי לזהות ולפתור בעיות במהירות. השתמשו ב-Google Cloud Logging כדי לאסוף לוגים מהפונקציות שלכם ולנטר את ביצועיהן.

שיטות עבודה מומלצות (Best Practices)

פתרון בעיות נפוצות

סיכום

Google Cloud Functions עם טריגרים של HTTP מספקים דרך חזקה וגמישה לבנות יישומים ללא שרתים. על ידי הבנת המושגים והטכניקות שנדונו במדריך זה, תוכלו למנף את העוצמה של Cloud Functions ליצירת פתרונות ניתנים להרחבה, חסכוניים ומונעי-אירועים עבור קהל גלובלי. אמצו את מהפכת ה-serverless וגלו את הפוטנציאל המלא של יישומי הענן שלכם!